﻿using System;
using System.Text;
using System.Drawing;
using System.Buffers;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;

public static partial class glDRIVE
{
    /*
    函数 gl.metcalo
    蒙特卡罗法求实根
    f(double x)计算方程左端函数值的函数名。
    参数 z: z根的初值。
    参数 b: b均匀分布随机数的端点初值。
    参数 m: m控制调节b的参数。
    参数 eps: eps控制精度要求。
    返回值 函数返回根的终值。若程序显示“b调整了100次！迭代不收敛！”，则需调整b和m的值再试。
    */

    public static string drive_metcalo()
    {
        int m;
        double b, eps;
        double z, x;
        b = 1.0;
        m = 10;
        eps = 0.00001;
        x = 0.5;

        gl.f_x = metcalo_mtclf;
        z = gl.metcalo(x, b, m, eps);

        string rs = "";
        rs += gl.html_table("解 Z：", new double[1] { z });
        rs += gl.html_table("验证:|F| = ", new double[1] { metcalo_mtclf(z) });

        return rs;
    }

    // 实函数方程
    private static double metcalo_mtclf(double x)
    {
        double y;
        y = Math.Exp(-x * x * x) - Math.Sin(x) / Math.Cos(x) + 800.0;
        return (y);
    }
}